//对axios进行二次封装,将刚才下载好的axios导入进来
import axios from "axios";
import router from "@/router/index";
import { Authorization } from "@/stores/Authorization";
import { ElMessage } from "element-plus";
// import "element-plus/es/components/message/style/index";

//2. 利用axios对象的方法create,去创建一个axios实例
//requests就是axios,只不过稍微配置一下
const api = axios.create({
  //基础路径
  baseURL: 'https://localhost:7003', // 所有请求的公共地址部分
  timeout: 10000, // 请求超时时间,这里的意思是当请求时间超过5秒还未取得结果时,提示用户请求超时
});

// 请求拦截处理 请求拦截 在请求拦截中可以补充请求相关的配置
// interceptors axios的拦截器对象
api.interceptors.request.use(
  (config) => {
    // config.baseURL="";
    //无token直接跳转登陆页面
    var authorization = Authorization();
    var token = authorization.GetToken();
    if (token.trim().length == 0) {
      router.push("/login");
    }
    // config.headers.Authorization = "Bearer " + authorization.GetToken();
    config.headers.Authorization = authorization.GetToken();
    // //请求地址
    // var businessServerAddress = BusinessServer();
    // config.baseURL = businessServerAddress.GetAddress();
    // 响应成功的返回
    return config; // 将配置完成的config对象返回出去 如果不返回 请求将不会进行
  },
  (err) => {
    // 请求发生错误时的相关处理 抛出错误
    //响应失败的返回
    // console.log("请求异常", err);q
    Promise.reject(err);
  }
);

//响应拦截处理  响应拦截器：包含两个函数（一个是成功返回的函数，一个是失败的返回的函数）
api.interceptors.response.use(
  (res) => {
    // 我们一般在这里处理，请求成功后的错误状态码 例如状态码是500，404，403
    console.log("响应状态码：", res.status);
    // console.log("响应原始结果:", res);
    // res 是所有相应的信息
    console.log("响应结果:", res.data);
    // console.log(res.data)
    return res.data;
  },
  (err) => {
    if (err.code == "ERR_BAD_REQUEST") {
      if (err.response) {
        if (err.response.status == "401") {
          var authorization = Authorization();
          //401鉴权错误，清除原鉴权缓存并跳转登录页
          authorization.ResetToken();
          router.push("/login");
        }
      }
    } else {
      ElMessage.error(err.message);
      Promise.reject(err);
    }
  }
);

//最后一步 暴露出去实例导出
export default api;
